package com.sanyou.service;

import com.sanyou.pojo.DataInfo;
import com.sanyou.pojo.DataInfoDetail;
import com.sanyou.pojo.vo.SimpleDataInfoVo;
import com.sanyou.utils.PagedResult;

import java.util.List;

public interface DataInfoService {
    /**
     * 获取所有数据字典信息
     * @return
     */
    public List<DataInfo> getAllDataInfo();

    /**
     * 分页获取数据字典信息
     * @param page
     * @param pageSize
     * @return
     */
    public PagedResult getAllDataInfo(Integer page, Integer pageSize);

    /**
     * 根据parentId获取该字典下所有数据
     * @param parentId
     * @return
     */
    public List<DataInfoDetail> getDataInfoDetailsById(String parentId);

    /**
     * 根据dataCode获取该字典下所有数据
     * @param dataCode
     * @return
     */
    public List<DataInfoDetail> getDataInfoDetailsByDataCode(String dataCode);

    /**
     * 根据parentId获取该字典下所有已启用的数据
     * @param parentId
     * @return
     */
    public List<DataInfoDetail> getDataInfoDetailsById(String parentId,String enableMark);

    /**
     * 根据parentId获取该字典下所有已启用的数据
     * @param parentId
     * @return
     */
    public List<DataInfoDetail> getDataInfoDetailsByDataCode(String parentId,String enableMark);


    /**
     * 根据dataCode获取该字典下所有已启用的数据的简易版本
     * 用于前端组件渲染
     * @param dataCode
     * @return
     */
    public List<SimpleDataInfoVo> getSimpleDataInfoDetailsByDataCode(String dataCode);

    /**
     * update/insert 数据字典信息
     * @param dataInfo
     * @return
     */
    public void upsertDataInfo(DataInfo dataInfo);

    /**
     * update/insert 数据字典中的字段映射内容
     * @param dataInfoDetail
     * @return
     */
    public void upsertDataInfoDetail(DataInfoDetail dataInfoDetail);

    /**
     * 停用映射
     * @param id
     * @return
     */
    public void disableDataInfoDetailById(String id);

    /**
     * 启用映射
     * @param id
     * @return
     */
    public void enableDataInfoDetailById(String id);

    /**
     * 根据id删除对应数据字典及以下所有映射
     * @param id
     * @return
     */
    public void deleteDataInfoById(String id);

    /**
     * 根据字典编码删除对应数据字典及以下所有映射
     * @param dataCode
     * @return
     */
    public void deleteDataInfoByCode(String dataCode);

    /**
     * 根据id删除对应映射
     * @param id
     * @return
     */
    public void deleteDataInfoDetailById(String id);

    /**
     * 根据id获取对应数据字典信息
     * @param id
     * @return
     */
    public DataInfo getDataInfoById(String id);

    /**
     * 根据字典编码获取对应数据字典信息
     * @param dataCode
     * @return
     */
    public DataInfo getDataInfoByCode(String dataCode);

    /**
     * 根据id获取对应数据字典字段映射信息
     * @param id
     * @return
     */
    public DataInfoDetail getDataInfoDetailById(String id);

    /**
     * 根据字典类型编码和字典字段编码获取目标字典记录
     * @return
     */
    DataInfoDetail getDataInfoDetailByParentCodeAndDataCode(String parentCode,String dataCode);

}
